package com.vjwealth.android.nos.base

import android.os.Bundle
import com.amap.api.location.AMapLocationClient
import com.amap.api.location.AMapLocationClientOption

open class BaseLocationActivity : BaseActivity() {

    private lateinit var locationClient: AMapLocationClient
    private lateinit var locationOption: AMapLocationClientOption
    protected var mAddress: String = ""
    protected  var mLatitude: Double = 0.0
    protected var mLongitude: Double = 0.0


    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        initLocation()
        startLocation()
    }

    override fun onDestroy() {
        super.onDestroy()
        destroyLocation()
    }

    private fun initLocation(){
        locationClient = AMapLocationClient(this@BaseLocationActivity)
        locationClient.setLocationOption(getDefaultOption())
        locationClient.setLocationListener { loc ->
            //解析定位结果
            mLatitude = loc.latitude
            mLongitude = loc.longitude
            mAddress = loc.address
            updateLocationInfor(mAddress, mLongitude, mLatitude)
        }
        locationOption = AMapLocationClientOption()
        locationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy)
    }

    private fun getDefaultOption() : AMapLocationClientOption{
        val mOption = AMapLocationClientOption()
        mOption.locationMode = AMapLocationClientOption.AMapLocationMode.Hight_Accuracy//可选，设置定位模式，可选的模式有高精度、仅设备、仅网络。默认为高精度模式
        mOption.isGpsFirst = false//可选，设置是否gps优先，只在高精度模式下有效。默认关闭
        mOption.httpTimeOut = 30000//可选，设置网络请求超时时间。默认为30秒。在仅设备模式下无效
        mOption.interval = 2000//可选，设置定位间隔。默认为2秒
        mOption.isNeedAddress = true//可选，设置是否返回逆地理地址信息。默认是true
        mOption.isOnceLocation = true//可选，设置是否单次定位。默认是false
        mOption.isOnceLocationLatest = false//可选，设置是否等待wifi刷新，默认为false.如果设置为true,会自动变为单次定位，持续定位时不要使用
        AMapLocationClientOption.setLocationProtocol(AMapLocationClientOption.AMapLocationProtocol.HTTP)//可选， 设置网络请求的协议。可选HTTP或者HTTPS。默认为HTTP
        mOption.isSensorEnable = false//可选，设置是否使用传感器。默认是false
        mOption.isWifiScan = true //可选，设置是否开启wifi扫描。默认为true，如果设置为false会同时停止主动刷新，停止以后完全依赖于系统刷新，定位位置可能存在误差
        mOption.isLocationCacheEnable = true //可选，设置是否使用缓存定位，默认为true
        return mOption
    }

    private fun startLocation(){
        //根据控件的选择，重新设置定位参数
        resetOption()
        // 设置定位参数
        locationClient.setLocationOption(locationOption)
        // 启动定位
        locationClient.startLocation()
    }

    private fun resetOption(){
        // 设置是否需要显示地址信息
        locationOption.isNeedAddress = true
        /**
         * 设置是否优先返回GPS定位结果，如果30秒内GPS没有返回定位结果则进行网络定位
         * 注意：只有在高精度模式下的单次定位有效，其他方式无效
         */
        locationOption.isGpsFirst = true
        // 设置是否开启缓存
        locationOption.isLocationCacheEnable = true
        // 设置是否单次定位
        locationOption.isOnceLocation = true
        //设置是否等待设备wifi刷新，如果设置为true,会自动变为单次定位，持续定位时不要使用
        locationOption.isOnceLocationLatest = false
        //设置是否使用传感器
        locationOption.isSensorEnable = false
        //设置是否开启wifi扫描，如果设置为false时同时会停止主动刷新，停止以后完全依赖于系统刷新，定位位置可能存在误差
        // 设置发送定位请求的时间间隔,最小值为1000，如果小于1000，按照1000算
        locationOption.interval = java.lang.Long.valueOf(2000)!!
        // 设置网络请求超时时间
        locationOption.httpTimeOut = java.lang.Long.valueOf(30000)!!
    }

    private fun destroyLocation() {
        if (null != locationClient) {
            /**
             * 如果AMapLocationClient是在当前Activity实例化的，
             * 在Activity的onDestroy中一定要执行AMapLocationClient的onDestroy
             */
            locationClient.stopLocation()
            locationClient.onDestroy()
        }
    }




    fun updateLocationInfor(address: String, lon: Double, lat: Double){}
}
